{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DeepTables\n",
    "\n",
    "## DeepTables: Deep-learning Toolkit for Tabular data\n",
    "DeepTables(DT) is a easy-to-use toolkit that enables deep learning to unleash great power on tabular data.\n",
    "\n",
    "\n",
    "## Overview\n",
    "\n",
    "MLP (also known as Fully-connected neural networks) have been shown inefficient in learning distribution representation. The \"add\" operations of the perceptron layer have been proven poor performance to exploring multiplicative feature interactions. In most cases, manual feature engineering is necessary and this work requires extensive domain knowledge and very cumbersome. How learning feature interactions efficiently in neural networks becomes the most important problem.\n",
    "\n",
    "Various models have been proposed to CTR prediction and continue to outperform existing state-of-the-art approaches to the late years. Well-known examples include FM, DeepFM, Wide&Deep, DCN, PNN, etc. These models can also provide good performance on tabular data under reasonable utilization.\n",
    "\n",
    "DT aims to utilize the latest research findings to provide users with an end-to-end toolkit on tabular data.\n",
    "\n",
    "DT has been designed with these key goals in mind:\n",
    "\n",
    "* Easy to use, non-experts can also use.\n",
    "* Provide good performance out of the box.\n",
    "* Flexible architecture and easy expansion by user.\n",
    "\n",
    "## Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from deeptables.models.deeptable import DeepTable, ModelConfig\n",
    "from deeptables.datasets import dsutils\n",
    "from sklearn.model_selection import train_test_split\n",
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### loading data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = dsutils.load_bank()\n",
    "df.drop(['id'], axis=1, inplace=True)\n",
    "\n",
    "df_train, df_test = train_test_split(df, test_size=0.2, random_state=42)\n",
    "\n",
    "y = df_train.pop('y')\n",
    "y_test = df_test.pop('y')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 class detected, {'yes', 'no'}, so inferred as a [binary classification] task\n",
      "Preparing features cost:0.07581210136413574\n",
      "Imputation cost:0.3101482391357422\n",
      "Categorical encoding cost:0.6227331161499023\n",
      "Discretization cost:0.207719087600708\n",
      "fit_transform cost:1.306624174118042\n",
      "Injected a callback [EarlyStopping]. monitor:val_AUC, patience:1, mode:max\n",
      ">>>>>>>>>>>>>>>>>>>>>> Model Desc <<<<<<<<<<<<<<<<<<<<<<< \n",
      "---------------------------------------------------------\n",
      "inputs:\n",
      "---------------------------------------------------------\n",
      "['all_categorical_vars: (16)', 'input_continuous_all: (7)']\n",
      "---------------------------------------------------------\n",
      "embeddings:\n",
      "---------------------------------------------------------\n",
      "input_dims: [14, 5, 6, 4, 4, 4, 5, 14, 6, 5, 9, 4, 7, 4, 6, 4]\n",
      "output_dims: [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]\n",
      "dropout: 0.3\n",
      "---------------------------------------------------------\n",
      "dense: dropout: 0\n",
      "batch_normalization: False\n",
      "---------------------------------------------------------\n",
      "concat_embed_dense: shape: (None, 71)\n",
      "---------------------------------------------------------\n",
      "nets: ['dnn_nets']\n",
      "---------------------------------------------------------\n",
      "dnn: input_shape (None, 71), output_shape (None, 64)\n",
      "---------------------------------------------------------\n",
      "stacking_op: add\n",
      "---------------------------------------------------------\n",
      "output: activation: sigmoid, output_shape: (None, 1), use_bias: True\n",
      "loss: binary_crossentropy\n",
      "optimizer: Adam\n",
      "---------------------------------------------------------\n",
      "\n",
      "Train on 69442 samples, validate on 17361 samples\n",
      "Epoch 1/10\n",
      "69442/69442 [==============================] - 27s 391us/sample - loss: 0.2404 - AUC: 0.8858 - acc: 0.8991 - val_loss: 0.2100 - val_AUC: 0.9333 - val_acc: 0.9160\n",
      "Epoch 2/10\n",
      "69442/69442 [==============================] - 14s 198us/sample - loss: 0.1930 - AUC: 0.9331 - acc: 0.9175 - val_loss: 0.1442 - val_AUC: 0.9693 - val_acc: 0.9410\n",
      "Epoch 3/10\n",
      "69442/69442 [==============================] - 12s 168us/sample - loss: 0.1666 - AUC: 0.9519 - acc: 0.9297 - val_loss: 0.1142 - val_AUC: 0.9857 - val_acc: 0.9649\n",
      "Epoch 4/10\n",
      "69442/69442 [==============================] - 12s 166us/sample - loss: 0.1419 - AUC: 0.9661 - acc: 0.9421 - val_loss: 0.0869 - val_AUC: 0.9944 - val_acc: 0.9793\n",
      "Epoch 5/10\n",
      "69442/69442 [==============================] - 12s 166us/sample - loss: 0.1265 - AUC: 0.9732 - acc: 0.9496 - val_loss: 0.0673 - val_AUC: 0.9973 - val_acc: 0.9834\n",
      "Epoch 6/10\n",
      "69376/69442 [============================>.] - ETA: 0s - loss: 0.1122 - AUC: 0.9795 - acc: 0.9553Restoring model weights from the end of the best epoch.\n",
      "69442/69442 [==============================] - 11s 164us/sample - loss: 0.1121 - AUC: 0.9795 - acc: 0.9553 - val_loss: 0.0555 - val_AUC: 0.9982 - val_acc: 0.9866\n",
      "Epoch 00006: early stopping\n",
      "Model has been saved to:dt_output/dt_20200320 112902_dnn_nets/dnn_nets.h5\n"
     ]
    }
   ],
   "source": [
    "config = ModelConfig(fixed_embedding_dim=True,embeddings_output_dim=4,metrics=['AUC','acc'],auto_discrete=True)\n",
    "\n",
    "dt = DeepTable(config=config)\n",
    "model, history = dt.fit(df_train, y, epochs=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "transform_X cost:2.3395299911499023\n",
      "transform_y cost:0.0034241676330566406\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'loss': 0.06808515293427966, 'AUC': 0.9969886, 'acc': 0.9831344}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.evaluate(df_test,y_test, batch_size=512, verbose=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1a45742650>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(history.history['acc'])\n",
    "plt.plot(history.history['val_acc'])\n",
    "plt.legend(['train', 'val'], loc='upper left') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1a45f68d10>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.history['loss'],label='loss')\n",
    "plt.plot(history.history['val_loss'])\n",
    "plt.legend(['train', 'val'], loc='upper left') "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### scoring"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "transform_X cost:2.2259840965270996\n",
      "predict_proba cost:3.6123929023742676\n"
     ]
    }
   ],
   "source": [
    "preds = dt.predict(df_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
